package com.networkmanagerj.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

import br.com.networkmanagerj.persistence.IEntity;

/**
 * Representa Qualquer Equipamento de rede
 * 
 * @author jean
 */
@Entity
@Table(name = "equipamento")
@NamedQueries({
		@NamedQuery(name = "Equipamento.searchAtivos", query = "select obj from Equipamento obj where obj.ativo = true") })
public class Equipamento implements IEntity {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "equipamento_id", nullable = false, unique = true)
	private Integer id;

	@Column(name = "ip", nullable = false, unique = true)
	private String ip;

	@Column(name = "nome", nullable = false, unique = true)
	private String nome;

	@Column(name = "login", nullable = false, unique = true)
	private String login;

	@Column(name = "senha", nullable = false, unique = true)
	private String senha;

	@Column(name = "marca", nullable = false, unique = true)
	private String marca;
	
	@Column(name = "modelo", nullable = false, unique = true)
	private String modelo;
	
	@ManyToOne
	@JoinColumn(name = "local_fisico_id", nullable = false)
	private LocalFisico localFisico;
	
	@Column(name = "ativo", nullable = true)
	private boolean ativo;

	/**
	 * Cria um novo equipamento
	 * 
	 * @param ip
	 * @param localFisico
	 * @param nome
	 * @param login
	 * @param senha
	 */
	public Equipamento(String ip, LocalFisico localFisico, String nome,
			String login, String senha) {
		this.ip = ip;
		this.localFisico = localFisico;
		this.nome = nome;
		this.login = login;
		this.senha = senha;
	}

	/**
	 * Cria um novo equipamento
	 */
	public Equipamento() {

	}

	/**
	 * @return the equipamentoId
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param equipamentoId the equipamentoId to set
	 */
	public void setId(Integer equipamentoId) {
		this.id = equipamentoId;
	}

	/**
	 * @return the ip
	 */
	public String getIp() {
		return ip;
	}

	/**
	 * @param ip the ip to set
	 */
	public void setIp(String ip) {
		this.ip = ip;
	}

	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @return the login
	 */
	public String getLogin() {
		return login;
	}

	/**
	 * @param login the login to set
	 */
	public void setLogin(String login) {
		this.login = login;
	}

	/**
	 * @return the senha
	 */
	public String getSenha() {
		return senha;
	}

	/**
	 * @param senha the senha to set
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}

	/**
	 * @return the localFisico
	 */
	public LocalFisico getLocalFisico() {
		return localFisico;
	}

	/**
	 * @param localFisico the localFisico to set
	 */
	public void setLocalFisico(LocalFisico localFisico) {
		this.localFisico = localFisico;
	}
	
	public boolean isAtivo() {
		return ativo;
	}
	
	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((ip == null) ? 0 : ip.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Equipamento other = (Equipamento) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (ip == null) {
			if (other.ip != null)
				return false;
		} else if (!ip.equals(other.ip))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return String.format("Id %s, Ip: %s", id, ip);
	}
}
